/*
 * 原版接口
 */
import * as server from "@minecraft/server";

/**
 * * 元素符文 类型
 */
export type RUNE_TYPE =
    | "rune_orange"
    | "rune_purple"
    | "rune_green"
    | "rune_white"
    | "rune_black"
    | "rune_void"
    | "rune_blue"
    | "rune_red";

/**
 * * 元素符文 枚举
 */
export enum RUNE_ENUM {
    /**
     * * 元素符文 - 虚无
     */
    void = 'rune_void',
    /**
     * * 元素符文 - 海蓝
     */
    blue = 'rune_blue',
    /**
     * * 元素符文 - 赤焰
     */
    red = 'rune_red',
    /**
     * * 元素符文 - 森绿
     */
    green = 'rune_green',
    /**
     * * 元素符文 - 橙岩
     */
    orange = 'rune_orange',
    /**
     * * 元素符文 - 紫雷
     */
    purple = 'rune_purple',
    /**
     * * 元素符文 - 白星
     */
    white = 'rune_white',
    /**
     * * 元素符文 - 黑渊
     */
    black = 'rune_black'
};

/**
 * * 元素符文 进行计算时 的 映射值
 */
export enum RUNE_COUNT {
    /**
     * * 元素符文 - 虚无
     */
    'rune_void' = 0,
    /**
     * * 元素符文 - 海蓝
     */
    'rune_blue' = 10,
    /**
     * * 元素符文 - 赤焰
     */
    'rune_red' = 100,
    /**
     * * 元素符文 - 森绿
     */
    'rune_green' = 1000,
    /**
     * * 元素符文 - 橙岩
     */
    'rune_orange' = 10000,
    /**
     * * 元素符文 - 紫雷
     */
    'rune_purple' = 100000,
    /**
     * * 元素符文 - 白星
     */
    'rune_white' = 1000000,
    /**
     * * 元素符文 - 黑渊
     */
    'rune_black' = 10000000
};

/**
 * * 路径执行容器 附属程序 回调参数
 */
export interface ROUTE_ANNEX_ARGS {
    /** 
     * * 每个 时钟周期 中 传入 的 坐标
     */
    location: server.Vector3;
    /** 
     * * 每个 时钟周期 中 传入 的 维度
     */
    dimension: server.Dimension;
    /** 
     * * 每个 时钟周期 中 传入 的 时间积分
     */
    tick: number;
};

/**
 * * 坐标信息 与 维度信息
 */
export interface LOCATION_AND_DIMENSION {
    /** 
     * * 位置对象
     */
    location: server.Vector3,
    /** 
     * * 维度对象
     */
    dimension: server.Dimension
};

/**
 * * 设置属性 - 符文类型
 */
export interface SET_PROPERTY_PANEL {
    /**
     * * 附着 - 元素符文
     * 
     * @description 当实体被攻击时 被附加上的 元素符文
     */
    add_rune?: RUNE_TYPE;
    /**
     * * 自身 - 元素符文
     * 
     * @description 当实体发动攻击时 附加到目标实体上的元素符文
     */
    self_rune?: RUNE_TYPE;
};

/**
 * * 设置属性 - 攻击面板
 */
export interface SET_PROPERTY_PANEL {
    /**
     * * 基础伤害
     * 
     * @description 基础的 攻击伤害 属性值
     */
    basic_attack?: number;
    /**
     * * 攻击提升
     * 
     * @description 单次生效的 基础伤害 提升值
     */
    raise_basic_attack?: number;
};

/**
 * * 设置属性 - 暴击面板
 */
export interface SET_PROPERTY_PANEL {
    /**
     * * 暴击概率
     * 
     * @description 基础的 暴击概率 属性值
     */
    erupt_odds?: number;
    /**
     * * 提升 - 暴击概率
     * 
     * @description 单次生效的 暴击概率 提升值
     */
    raise_erupt_odds?: number;
    /**
     * * 暴击伤害
     * 
     * @description 基础的 暴击伤害 属性值
     */
    erupt_hurt?: number;
    /**
     * * 暴伤提升
     * 
     * @description 单次生效的 暴击伤害 提升值
     */
    raise_erupt_hurt?: number;
};

/**
 * * 设置属性 - 增伤面板
 */
export interface SET_PROPERTY_PANEL {
    /**
     * * 伤害提升
     * 
     * @description 最终结算时 单次生效的 额外增加的 不参与其他运算的 伤害数值
     */
    damage_increase?: number;
    /**
     * * 伤害倍率
     * 
     * @description 最终结算时 单次生效的 按照设定的数值 提高实体造成的伤害
     */
    double_damage?: number;
};

/**
 * * 获取属性 - 符文类型
 */
export interface GET_PROPERTY_PANEL {
    /**
     * * 附着 - 元素符文
     * 
     * @description 当实体被攻击时 被附加上的 元素符文
     */
    add_rune: RUNE_TYPE;
    /**
     * * 自身 - 元素符文
     * 
     * @description 当实体发动攻击时 附加到目标实体上的元素符文
     */
    self_rune: RUNE_TYPE;
};

/**
 * * 获取属性 - 攻击面板
 */
export interface GET_PROPERTY_PANEL {
    /**
     * * 基础伤害
     * 
     * @description 基础的 攻击伤害 属性值
     */
    basic_attack: number;
    /**
     * * 攻击提升
     * 
     * @description 单次生效的 基础伤害 提升值
     */
    raise_basic_attack: number;
};

/**
 * * 获取属性 - 暴击面板
 */
export interface GET_PROPERTY_PANEL {
    /**
     * * 暴击概率
     * 
     * @description 基础的 暴击概率 属性值
     */
    erupt_odds: number;
    /**
     * * 提升 - 暴击概率
     * 
     * @description 单次生效的 暴击概率 提升值
     */
    raise_erupt_odds: number;
    /**
     * * 暴击伤害
     * 
     * @description 基础的 暴击伤害 属性值
     */
    erupt_hurt: number;
    /**
     * * 暴伤提升
     * 
     * @description 单次生效的 暴击伤害 提升值
     */
    raise_erupt_hurt: number;
};

/**
 * * 获取属性 - 增伤面板
 */
export interface GET_PROPERTY_PANEL {
    /**
     * * 伤害提升
     * 
     * @description 最终结算时 单次生效的 额外增加的 不参与其他运算的 伤害数值
     */
    damage_increase: number;
    /**
     * * 伤害倍率
     * 
     * @description 最终结算时 单次生效的 按照设定的数值 提高实体造成的伤害
     */
    double_damage: number;
};

/**
 * * 「意图」 - 信息存储
 */
export interface INTENTION_NOTE {
    /**
     * * 用于检索的根标签
     */
    root: string[];
    /**
     * * 文本内容
     */
    intel: server.RawMessage[];
    /**
     * * 是否启用唯一性方案
     */
    only?: boolean;
    /**
     * * 优先级
     */
    priority?: number;
    /**
     * * 判断阈值
     */
    confine?: number;
    /**
     * * 模块代码
     * 
     * @param player - 用于 执行函数 的 玩家对象
     * 
     * @param texts - 用于 执行函数 的 识别文本数组
     * 
     * @description 使用时建议启用< only >
     */
    code?: (player: server.Player, texts: string[]) => server.RawMessage;
};

/**
 * * 「计划」 - 信息存储
 */
export interface SCHEDULE_NOTE {
    /**
     * * 当前任务依赖的标签
     */
    rely?: string[];
    /**
     * * 任务完成后添加的标签
     */
    onDone?: string[];
    /**
     * * 任务完成后触发的引导
     */
    prompt?: string;
    /**
     * * 任务的图标纹理
     */
    texture?: string;
    /**
     * * 任务的文本描述
     */
    refer: server.RawMessage[];
    /**
     * * 任务完成后的奖励
     */
    reward?: server.ItemStack[];
    /**
     * * 任务完成后的损耗
     */
    attrition?: server.ItemStack[];
    /**
     * * 任务完成后处理函数
     */
    after?: (player: server.Player) => void;
    /**
     * * 任务完成前处理函数
     */
    before?: (player: server.Player) => boolean;
};

/**
 * * 「指引」 - 信息存储
 */
export interface PROMPT_NOTE {
    /**
     * * 文本描述
     */
    refer: server.RawMessage;
    /**
     * * 文本显示的延迟时间
     */
    delay: number;
};